arcgis js api目前有两条路线,4.4支持2D和3D地图,3.21主要做2D全景图,两种的地图加载方式和接口的用法还是有些不同的,以前用3.21加载天地图的时候直接用天地图的REST url就可以加载地图,在用新的4.4加载天地图的时候参照官网的加载例子缺怎么都无法将天地图加载进来,发送了请求会返回正确的json数据,但是不会去请求瓦片图。经研究后发现还是空间参考的问题,arcgis默认用的4326参考,而天地图用的是4490参考。如果不定义号空间参考是不会去加载地图瓦片的。
用重庆.天地图的rest api作为例子:http://www.digitalcq.com/RemoteRest/services/CQMap_VEC/MapServer,直接进可以查看天地图的各种参数.
在3.21中直接通过url加载地图:
createMap() {
esriLoader.dojoRequire([
"esri/map",
"esri/basemaps",
], (Map, esriBasemaps) => {
esriBasemaps.tianditu = {
baseMapLayers: [{ url: "http://www.digitalcq.com/RemoteRest/services/CQMap_VEC/MapServer" }],
title: "TianDitu"
};
var map = new Map("map", {
basemap: "tianditu",
center: [106.588252, 29.567552],
zoom: 8,
});
});
}
在4.4中需要定义空间参考:
createMap() {
esriLoader.dojoRequire(["esri/Map",
"esri/views/MapView",
"esri/Basemap",
"esri/layers/TileLayer",
"esri/geometry/SpatialReference",
"esri/geometry/Extent"
], (Map, MapView, Basemap,TileLayer,SpatialReference,Extent) => {
var sr = new SpatialReference({wkid:4490});
var fullextent = new Extent({
xmax:1000.0,xmin:0.0,ymax:1000,ymin:0.0,spatialReference:sr
});
var initialextent = new Extent({
xmax:108.13817851680021,xmin:105.3831598117314,ymax:30.46728535770415,ymin:28.897172489811304,spatialReference:sr
})
var tileBaseLayer = new TileLayer({
url: "http://www.digitalcq.com/RemoteRest/services/CQMap_VEC/MapServer",
spatialReference:sr,
fullExtent:fullextent
})
var cq_map = new Basemap({
baseLayers: [tileBaseLayer],
title: "arcgis",
id: "arcgis",
});
var map = new Map({
basemap: cq_map
});
var view = new MapView({
container: "viewDiv",
map: map,
extent:initialextent,
spatialReference:sr,
});
}
Done: